home *** CD-ROM | disk | FTP | other *** search
- #include "MultiMonitorController.h"
-
- #include <LowMem.h>
- #include <string.h>
-
- MultiMonitorController * MultiMonitorController::sMMController = NULL;
- TMTask MultiMonitorController::sTimerTask;
- TimerUPP MultiMonitorController::sTimerRoutineDescriptor = NewTimerProc(MultiMonitorController::CursorTimer);
-
- // Do it 60fps
- const UInt32 kScreenMillisecondUpdate = 1000 / 30;
-
- // ---------------------------------------------------------------------------
- // • MultiMonitorController
- // ---------------------------------------------------------------------------
-
- MultiMonitorController::MultiMonitorController()
- {
- sMMController = this;
- mCapturedDevice = NULL;
-
- memset(&mVirtualDevice, 0, sizeof(mVirtualDevice));
-
- mCapturedDevice = NEW CapturedGDevice();
- mVirtualDevice = NEW VirtualGDevice();
- }
-
-
- // ---------------------------------------------------------------------------
- // • ~MultiMonitorController
- // ---------------------------------------------------------------------------
-
- MultiMonitorController::~MultiMonitorController()
- {
- sMMController = NULL;
-
- if (mCapturedDevice != NULL)
- {
- mCapturedDevice->UncaptureDevice();
- delete mCapturedDevice;
- mCapturedDevice = NULL;
- }
-
- delete mVirtualDevice;
- mVirtualDevice = NULL;
- }
-
-
- // ---------------------------------------------------------------------------
- // • Enable
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::Enable()
- {
- mCapturedDevice->CaptureDevice(::GetMainDevice(), mVirtualDevice);
-
- memset(&sTimerTask, 0, sizeof(sTimerTask));
- sTimerTask.tmAddr = MultiMonitorController::sTimerRoutineDescriptor;
-
- mCurrentEffect = NEW LargeBlendEffect();
- mCapturedDevice->SetGraphicBlendEffect(mCurrentEffect);
-
- ::InsTime((QElemPtr)&sTimerTask);
- ::PrimeTime((QElemPtr)&sTimerTask, kScreenMillisecondUpdate);
- }
-
-
- // ---------------------------------------------------------------------------
- // • Disable
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::Disable()
- {
- ::RmvTime((QElemPtr)&sTimerTask);
-
- mCapturedDevice->UncaptureDevice();
- }
-
-
- // ---------------------------------------------------------------------------
- // • CursorTimer
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::CursorTimer(
- TMTaskPtr inTimerTaskPtr)
- {
- // Call through to jCrsrTask to keep the mouse alive
- if (!LMGetCrsrBusy())
- CallUniversalProc(*(UniversalProcPtr *)0x08EE, 0);
-
- // Just update the captured screen
- MultiMonitorController::GetInstance().mCapturedDevice->UpdateCapturedScreen();
-
- ::PrimeTime((QElemPtr)inTimerTaskPtr, kScreenMillisecondUpdate);
- }
-
-
- // ---------------------------------------------------------------------------
- // • EnableMagnify
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::EnableMagnify(
- Boolean inEnable)
- {
- mCurrentEffect->EnableMagnify(inEnable);
- }
-
-
-